/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ttt.nor2.main;

/*
 * @(#)SimpleRead.java  1.12 98/06/25 SMI
 *
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license
 * to use, modify and redistribute this software in source and binary
 * code form, provided that i) this copyright notice and license appear
 * on all copies of the software; and ii) Licensee does not utilize the
 * software in a manner which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty of any kind.
 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
 * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
 * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE
 * SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS
 * BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
 * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING
 * OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control
 * of aircraft, air traffic, aircraft navigation or aircraft
 * communications; or in the design, construction, operation or
 * maintenance of any nuclear facility. Licensee represents and
 * warrants that it will not use or redistribute the Software for such
 * purposes.
 */
import com.ttt.nor2.alarm.Comm2File;
import com.ttt.nor2.util.ChkArgs;
import com.ttt.nor2.util.ExceptionUtil;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;
import java.util.TooManyListenersException;

import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
import javax.comm.UnsupportedCommOperationException;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class MainALarm implements Runnable, SerialPortEventListener {

    static CommPortIdentifier portId;
    static Enumeration portList;
    static Logger logger = Logger.getLogger(MainALarm.class);
    InputStream inputStream;
    SerialPort serialPort;
    Thread readThread;
    static Comm2File comm2File;

    public static void main(String[] args) {

        ChkArgs chkargs = new ChkArgs(args);
        Properties prop = chkargs.getProps();
        PropertyConfigurator.configure(chkargs.getFileConfig());
        logger.info("Start Application Run alarm...");
        if (args[1] == null) {
            logger.info("Can't initial com port! Exc => java servicename config.properties com1");
            System.exit(-1);
        }
        //"/dev/ttyS0" => com1
        //"/dev/ttyS1" => com2
        String com = args[1];
        String dev = "";
        if (com.equalsIgnoreCase("COM1")) {
            dev = "/dev/ttyS0";
        } else if (com.equalsIgnoreCase("COM2")) {
            dev = "/dev/ttyS1";
        }
        logger.info("initial com port device [" + dev + "]");
        portList = CommPortIdentifier.getPortIdentifiers();

        //create class
        String path = prop.getProperty("PATH");
        logger.info("save data to path [" + path + "]");
        //System.exit(-1);
        comm2File = new Comm2File(path);

        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            //System.out.println(portId.getName());
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                //if (portId.getName().equals("COM1")) {
                if (portId.getName().equals(dev)) {
                    MainALarm reader = new MainALarm();
                }
            }
        }//end while

    }

    public MainALarm() {
        try {
            serialPort = (SerialPort) portId.open("MainClassApp", 2000);
        } catch (PortInUseException e) {
        }
        try {
            inputStream = serialPort.getInputStream();
        } catch (IOException e) {
        }
        try {
            serialPort.addEventListener(this);
        } catch (TooManyListenersException e) {
        }
        serialPort.notifyOnDataAvailable(true);
        try {
            serialPort.setSerialPortParams(9600, SerialPort.DATABITS_7, SerialPort.STOPBITS_1,
                    SerialPort.PARITY_EVEN);
        } catch (UnsupportedCommOperationException e) {
        }
        readThread = new Thread(this);
        readThread.start();
    }

    public void run() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
        }
    }

    public void serialEvent(SerialPortEvent event) {
        switch (event.getEventType()) {
            case SerialPortEvent.BI:
            case SerialPortEvent.OE:
            case SerialPortEvent.FE:
            case SerialPortEvent.PE:
            case SerialPortEvent.CD:
            case SerialPortEvent.CTS:
            case SerialPortEvent.DSR:
            case SerialPortEvent.RI:
            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
                break;
            case SerialPortEvent.DATA_AVAILABLE:
                /*
                byte[] readBuffer = new byte[20];

                try {
                    while (inputStream.available() > 0) {
                        int numBytes = inputStream.read(readBuffer);
                    }

                    System.out.print(new String(readBuffer));
                } catch (IOException e) {
                }
                */
                
                try {
                comm2File.setIo(inputStream);
                comm2File.process();
                } catch (Exception e) {
                logger.error("Exception run class comm2File error! " + ExceptionUtil.getStackTrace(e));
                }
                
                break;
        }
    }
}
